package com.example.demo.common;

import org.springframework.util.DigestUtils;
import org.springframework.util.StringUtils;

import java.util.UUID;

public class PasswordUtils {
    // 1. 加盐并生成密码
    public static String encrypt(String password){
        // 1.1 产生盐值(32位)
        String salt = UUID.randomUUID().toString().replace("-","");
        // 1.2 生产加盐后的密码
        String saltPassword = DigestUtils.md5DigestAsHex((salt + password).getBytes());
        // 1.3 生成最终密码(保存到数据库中的格式) [32盐 + $ + 32加盐的密码]
        String finalPassword = salt + "$" + saltPassword;
        return finalPassword;
    }

    // 2. 生成加盐的密码 (方法1重载)
    public static String encrypt(String password, String salt){
        // 1. 生成加盐后的密码
        String saltPassword = DigestUtils.md5DigestAsHex((salt + password).getBytes());
        // 2. 生成最终的密码
        String finalPassword = salt + "$" + saltPassword;
        return finalPassword;
    }

    /**
     * 3. 验证密码
     * @param inputPassword 用户输入的明文密码
     * @param finalPassword 数据库保存的密码
     */
    public static boolean check(String inputPassword, String finalPassword){
        if(StringUtils.hasLength(inputPassword) && StringUtils.hasLength(finalPassword) && finalPassword.length() == 65) {

            // 1. 得到盐值( $ 是通配符，所以)
            String salt = finalPassword.split("\\$")[0];
            // 2. 调用方法加密
            String confirmPassword = PasswordUtils.encrypt(inputPassword, salt);
            // 3. 对比两个最终密码是否相同
            return confirmPassword.equals(finalPassword);
        }
        return false;
    }

//    public static void main(String[] args) {
//        String password = "123456";
//        System.out.println(encrypt(password));
//    }
//
}
